import java.util.Stack;

//计算两种情况的鱼，size[1,2,3,5,4],dir[1,1,0,0,0]size表示大小，dir中1表示向右，0表示向左，只考虑一个维度，只有当两条鱼相向而游，大鱼吃小鱼，通过程序判断最后剩几条鱼。
//边界问题：所有的鱼都向一个方向游动，一条鱼吃掉所有鱼
public class twoFishes {
    public static void main(String[] args) {
        int[] size = {1,2,4,3,6};
        int[] dir = {1,1,0,0,0};
        int num = getLastNum(size,dir);
        if(num>0) {
            System.out.println("最后还剩" + num + "条鱼");
        }
        else{
            System.out.println("最后啥都没剩下，可能是程序错误");
        }

    }
    private static int getLastNum(int[] size,int[] dir){
        int sizeNum = size.length;
        int dirNum = dir.length;
        if(sizeNum<=1){
            return sizeNum;
        }

        final int left=0;
        final int right=1;

        Stack<Integer>t=new Stack<>();
        int curFishDir=0;

        for(int i=0;i<sizeNum;i++) {
            curFishDir = dir[i];
            final int curFishSize = size[i];
            boolean hasEat = false;
            while (!t.empty() && dir[t.peek()] == right && curFishDir == left) {
                if (size[t.peek()] > curFishSize) {
                    hasEat = true;
                    break;
                }
                t.pop();
            }
            if (!hasEat) {
                t.push(i);
            }
        }


        int count = t.size();
        return count;

    }
}
